package net.atos.java.example.boodschappen.persistence.impl;

import java.util.LinkedList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import net.atos.java.example.boodschappen.model.Boodschap;
import net.atos.java.example.boodschappen.persistence.BoodschapRepository;
import net.atos.java.example.boodschappen.persistence.model.PersistentBoodschap;
import net.atos.java.example.boodschappen.server.persistence.PersistenceHelper;

/**
 * De boodschap JDO repository.
 * 
 * @author Pal Hargitai
 */
public class BoodschapJdoRepository extends
		AbstractJdoRepository<String, Boodschap, PersistentBoodschap> implements
		BoodschapRepository {

	/** Default constructor. */
	public BoodschapJdoRepository() {
		super(PersistentBoodschap.class);
	}

	/** {@inheritDoc} */
	@Override
	protected Boodschap convertToDomain(PersistentBoodschap entity,
			PersistenceManager pm) {
		return new Boodschap.Builder().naam(entity.getNaam())
				.hoeveelheidEenheid(entity.getHoeveelheidEenheid())
				.gebruiker(entity.getGebruikerId())
				.hoeveelheid(entity.getHoeveelheid())
				.identificatie(entity.getPk()).build();
	}

	/** {@inheritDoc} */
	@Override
	protected PersistentBoodschap convertToPersistent(Boodschap entity,
			PersistenceManager pm) {
		return new PersistentBoodschap.Builder().boodschap(entity).build();
	}

	/** {@inheritDoc} */
	@Override
	public List<Boodschap> ophalenBoodschappen(String gebruikerId) {
		PersistenceManager pm = PersistenceHelper.getPersistenceManager();
		List<Boodschap> result;
		try {
			Query query = pm.newQuery(PersistentBoodschap.class);
			query.setFilter("gebruikerId == idParam");
			query.declareParameters("String idParam");
			@SuppressWarnings("unchecked")
			List<PersistentBoodschap> results = (List<PersistentBoodschap>) query
					.execute(gebruikerId);
			result = new LinkedList<Boodschap>();
			for (PersistentBoodschap boodschap : results) {
				result.add(convertToDomain(boodschap, pm));
			}
		} finally {
			pm.close();
		}
		return result;
	}
}
